package cn.itsource.org.controller;

import cn.itsource.org.domain.Department;
import cn.itsource.org.query.DepartmentQuery;
import cn.itsource.org.service.IDepartmentService;
import cn.itsource.utils.AjaxResult;
import cn.itsource.utils.PageList;
import cn.itsource.vo.TreeDepartment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

//@Controller
@RestController //restful风格。 即当前这个类中所有的方法都将是@ResponseBody 的返回类型（json)
@RequestMapping("/dept")
//@CrossOrigin(origins = "*", maxAge = 3600) //* 放行所有
public class DepartmentController {
    @Autowired
    private IDepartmentService departmentService;

    /**
        查询所有上下级结构的 部门列表：
                是一个树状结构且 数据的结构必须是：
                    [
                        {
                            value
                            label
                            children
                        }
                     ]

     在java接口开发中，如果自定义对象，则不建议写在domain实体类的包中，而是重新建新：
            自定义入参：query或 dto
            自定义出参：vo
     */
    @GetMapping("/findtreedepartment")
    public List<Department> findTreeDepartment(){
        return departmentService.findTreeDepartment();
    }



    /**
     * 批量删除
     *
     * @param ids
     * @return
     */
    @PostMapping("/bartchdel")
    public AjaxResult bartchDel(@RequestBody List<Long> ids) {
        return departmentService.bartchDel(ids);
    }

    /**
     * 带条件查询
     * 注意：当前端访问后台时，如果是携带了参数，哪怕这些参数在某个javabean中就已经存在
     * 考虑规范问题，必须创建一个新的查询类，来接收这些参数
     * 如果前端传递参数时，是以一个对象的方式传递，
     * 那么后台接收这个对象类型参数时，必须要加  注解@RequestBody
     * <p>
     * 如果前端的参数成功传递到后台
     * 剩下的工作：全部是后台完成。
     */
    @PostMapping("/findbyparams")
    public List<Department> findByParams(@RequestBody DepartmentQuery query) {
        return departmentService.findByParams(query);
    }

    @PostMapping("/findpagebyparams")
    public PageList<Department> findPageByParams(@RequestBody DepartmentQuery query) {
        return departmentService.findPageByParams(query);
    }


    //    @RequestMapping("/loadall")
    @GetMapping
    public List<Department> loadAll() {
        return departmentService.loadAll();
    }

    //根据ID查询数据
    /*
        当一个查询方法，如果只需要传一个条件，特别是主键ID，习惯使用路径传参



     */
    @GetMapping("/{id}")
    public String findById(@PathVariable("id") Long id2) {
        return "接收到的参数id=" + id2;
    }

    //添加
    @PostMapping
    public AjaxResult save(@RequestBody Department dept) {
        return departmentService.save(dept);
    }

//    //修改
//    @PutMapping
//    public String update() {
//        return "您访问的是修改方法";
//    }

    //删除
    @DeleteMapping
    public String delete() {
        return "您访问的是删除方法";
    }

}
